/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package tRM_LL73.impl;

import bP.BPPackage;
import bP.impl.BPPackageImpl;
import bRM_LL73.BRM_LL73Package;

import bRM_LL73.impl.BRM_LL73PackageImpl;

import genArchi.GenArchiPackage;

import genArchi.impl.GenArchiPackageImpl;

import mH1.MH1Package;

import mH1.impl.MH1PackageImpl;

import mH2.MH2Package;

import mH2.impl.MH2PackageImpl;

import mH3.MH3Package;
import mH3.impl.MH3PackageImpl;
import mS.MSPackage;

import mS.impl.MSPackageImpl;

import node1.Node1Package;

import node1.impl.Node1PackageImpl;

import node2.Node2Package;
import node2.impl.Node2PackageImpl;
import nodeDependencies.NodeDependenciesPackage;
import nodeDependencies.impl.NodeDependenciesPackageImpl;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;

import org.eclipse.emf.ecore.impl.EPackageImpl;

import pUNB.PUNBPackage;

import pUNB.impl.PUNBPackageImpl;

import result.ResultPackage;

import result.impl.ResultPackageImpl;

import resultsWCRT.ResultsWCRTPackage;

import resultsWCRT.impl.ResultsWCRTPackageImpl;

import spu96a01.Spu96a01Package;
import spu96a01.impl.Spu96a01PackageImpl;
import spu96a02.Spu96a02Package;
import spu96a02.impl.Spu96a02PackageImpl;
import srl90a01.Srl90a01Package;
import srl90a01.impl.Srl90a01PackageImpl;
import srl90a02.Srl90a02Package;
import srl90a02.impl.Srl90a02PackageImpl;
import srl90a03.Srl90a03Package;
import srl90a03.impl.Srl90a03PackageImpl;
import tEDF_LL73.TEDF_LL73Package;

import tEDF_LL73.impl.TEDF_LL73PackageImpl;

import tRM_LL73.TRM_LL73Factory;
import tRM_LL73.TRM_LL73Package;

import tRM_RTNB.TRM_RTNBPackage;

import tRM_RTNB.impl.TRM_RTNBPackageImpl;
import tin92c01.Tin92c01Package;
import tin92c01.impl.Tin92c01PackageImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class TRM_LL73PackageImpl extends EPackageImpl implements TRM_LL73Package {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass trM_LL73EClass = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see tRM_LL73.TRM_LL73Package#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private TRM_LL73PackageImpl() {
		super(eNS_URI, TRM_LL73Factory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this
	 * model, and for any others upon which it depends.  Simple
	 * dependencies are satisfied by calling this method on all
	 * dependent packages before doing anything else.  This method drives
	 * initialization for interdependent packages directly, in parallel
	 * with this package, itself.
	 * <p>Of this package and its interdependencies, all packages which
	 * have not yet been registered by their URI values are first created
	 * and registered.  The packages are then initialized in two steps:
	 * meta-model objects for all of the packages are created before any
	 * are initialized, since one package's meta-model objects may refer to
	 * those of another.
	 * <p>Invocation of this method will not affect any packages that have
	 * already been initialized.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static TRM_LL73Package init() {
		if (isInited) return (TRM_LL73Package)EPackage.Registry.INSTANCE.getEPackage(TRM_LL73Package.eNS_URI);

		// Obtain or create and register package
		TRM_LL73PackageImpl theTRM_LL73Package = (TRM_LL73PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof TRM_LL73PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new TRM_LL73PackageImpl());

		isInited = true;

		// Obtain or create and register interdependencies
		BPPackageImpl theBPPackage = (BPPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(BPPackage.eNS_URI) instanceof BPPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(BPPackage.eNS_URI) : BPPackage.eINSTANCE);
		BRM_LL73PackageImpl theBRM_LL73Package = (BRM_LL73PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(BRM_LL73Package.eNS_URI) instanceof BRM_LL73PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(BRM_LL73Package.eNS_URI) : BRM_LL73Package.eINSTANCE);
		GenArchiPackageImpl theGenArchiPackage = (GenArchiPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(GenArchiPackage.eNS_URI) instanceof GenArchiPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(GenArchiPackage.eNS_URI) : GenArchiPackage.eINSTANCE);
		MH1PackageImpl theMH1Package = (MH1PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(MH1Package.eNS_URI) instanceof MH1PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(MH1Package.eNS_URI) : MH1Package.eINSTANCE);
		MH2PackageImpl theMH2Package = (MH2PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(MH2Package.eNS_URI) instanceof MH2PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(MH2Package.eNS_URI) : MH2Package.eINSTANCE);
		MH3PackageImpl theMH3Package = (MH3PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(MH3Package.eNS_URI) instanceof MH3PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(MH3Package.eNS_URI) : MH3Package.eINSTANCE);
		MSPackageImpl theMSPackage = (MSPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(MSPackage.eNS_URI) instanceof MSPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(MSPackage.eNS_URI) : MSPackage.eINSTANCE);
		Node1PackageImpl theNode1Package = (Node1PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Node1Package.eNS_URI) instanceof Node1PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Node1Package.eNS_URI) : Node1Package.eINSTANCE);
		Node2PackageImpl theNode2Package = (Node2PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Node2Package.eNS_URI) instanceof Node2PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Node2Package.eNS_URI) : Node2Package.eINSTANCE);
		NodeDependenciesPackageImpl theNodeDependenciesPackage = (NodeDependenciesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(NodeDependenciesPackage.eNS_URI) instanceof NodeDependenciesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(NodeDependenciesPackage.eNS_URI) : NodeDependenciesPackage.eINSTANCE);
		PUNBPackageImpl thePUNBPackage = (PUNBPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(PUNBPackage.eNS_URI) instanceof PUNBPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(PUNBPackage.eNS_URI) : PUNBPackage.eINSTANCE);
		ResultPackageImpl theResultPackage = (ResultPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ResultPackage.eNS_URI) instanceof ResultPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ResultPackage.eNS_URI) : ResultPackage.eINSTANCE);
		ResultsWCRTPackageImpl theResultsWCRTPackage = (ResultsWCRTPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ResultsWCRTPackage.eNS_URI) instanceof ResultsWCRTPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ResultsWCRTPackage.eNS_URI) : ResultsWCRTPackage.eINSTANCE);
		Spu96a01PackageImpl theSpu96a01Package = (Spu96a01PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Spu96a01Package.eNS_URI) instanceof Spu96a01PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Spu96a01Package.eNS_URI) : Spu96a01Package.eINSTANCE);
		Spu96a02PackageImpl theSpu96a02Package = (Spu96a02PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Spu96a02Package.eNS_URI) instanceof Spu96a02PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Spu96a02Package.eNS_URI) : Spu96a02Package.eINSTANCE);
		Srl90a01PackageImpl theSrl90a01Package = (Srl90a01PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Srl90a01Package.eNS_URI) instanceof Srl90a01PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Srl90a01Package.eNS_URI) : Srl90a01Package.eINSTANCE);
		Srl90a02PackageImpl theSrl90a02Package = (Srl90a02PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Srl90a02Package.eNS_URI) instanceof Srl90a02PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Srl90a02Package.eNS_URI) : Srl90a02Package.eINSTANCE);
		Srl90a03PackageImpl theSrl90a03Package = (Srl90a03PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Srl90a03Package.eNS_URI) instanceof Srl90a03PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Srl90a03Package.eNS_URI) : Srl90a03Package.eINSTANCE);
		TEDF_LL73PackageImpl theTEDF_LL73Package = (TEDF_LL73PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TEDF_LL73Package.eNS_URI) instanceof TEDF_LL73PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TEDF_LL73Package.eNS_URI) : TEDF_LL73Package.eINSTANCE);
		Tin92c01PackageImpl theTin92c01Package = (Tin92c01PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Tin92c01Package.eNS_URI) instanceof Tin92c01PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Tin92c01Package.eNS_URI) : Tin92c01Package.eINSTANCE);
		TRM_RTNBPackageImpl theTRM_RTNBPackage = (TRM_RTNBPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TRM_RTNBPackage.eNS_URI) instanceof TRM_RTNBPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TRM_RTNBPackage.eNS_URI) : TRM_RTNBPackage.eINSTANCE);

		// Create package meta-data objects
		theTRM_LL73Package.createPackageContents();
		theBPPackage.createPackageContents();
		theBRM_LL73Package.createPackageContents();
		theGenArchiPackage.createPackageContents();
		theMH1Package.createPackageContents();
		theMH2Package.createPackageContents();
		theMH3Package.createPackageContents();
		theMSPackage.createPackageContents();
		theNode1Package.createPackageContents();
		theNode2Package.createPackageContents();
		theNodeDependenciesPackage.createPackageContents();
		thePUNBPackage.createPackageContents();
		theResultPackage.createPackageContents();
		theResultsWCRTPackage.createPackageContents();
		theSpu96a01Package.createPackageContents();
		theSpu96a02Package.createPackageContents();
		theSrl90a01Package.createPackageContents();
		theSrl90a02Package.createPackageContents();
		theSrl90a03Package.createPackageContents();
		theTEDF_LL73Package.createPackageContents();
		theTin92c01Package.createPackageContents();
		theTRM_RTNBPackage.createPackageContents();

		// Initialize created meta-data
		theTRM_LL73Package.initializePackageContents();
		theBPPackage.initializePackageContents();
		theBRM_LL73Package.initializePackageContents();
		theGenArchiPackage.initializePackageContents();
		theMH1Package.initializePackageContents();
		theMH2Package.initializePackageContents();
		theMH3Package.initializePackageContents();
		theMSPackage.initializePackageContents();
		theNode1Package.initializePackageContents();
		theNode2Package.initializePackageContents();
		theNodeDependenciesPackage.initializePackageContents();
		thePUNBPackage.initializePackageContents();
		theResultPackage.initializePackageContents();
		theResultsWCRTPackage.initializePackageContents();
		theSpu96a01Package.initializePackageContents();
		theSpu96a02Package.initializePackageContents();
		theSrl90a01Package.initializePackageContents();
		theSrl90a02Package.initializePackageContents();
		theSrl90a03Package.initializePackageContents();
		theTEDF_LL73Package.initializePackageContents();
		theTin92c01Package.initializePackageContents();
		theTRM_RTNBPackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theTRM_LL73Package.freeze();

		return theTRM_LL73Package;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTRM_LL73() {
		return trM_LL73EClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getTRM_LL73_PU() {
		return (EReference)trM_LL73EClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getTRM_LL73_Bound() {
		return (EReference)trM_LL73EClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public TRM_LL73Factory getTRM_LL73Factory() {
		return (TRM_LL73Factory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		trM_LL73EClass = createEClass(TRM_LL73);
		createEReference(trM_LL73EClass, TRM_LL73__PU);
		createEReference(trM_LL73EClass, TRM_LL73__BOUND);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Obtain other dependent packages
		GenArchiPackage theGenArchiPackage = (GenArchiPackage)EPackage.Registry.INSTANCE.getEPackage(GenArchiPackage.eNS_URI);
		PUNBPackage thePUNBPackage = (PUNBPackage)EPackage.Registry.INSTANCE.getEPackage(PUNBPackage.eNS_URI);
		BRM_LL73Package theBRM_LL73Package = (BRM_LL73Package)EPackage.Registry.INSTANCE.getEPackage(BRM_LL73Package.eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		trM_LL73EClass.getESuperTypes().add(theGenArchiPackage.getNode());

		// Initialize classes and features; add operations and parameters
		initEClass(trM_LL73EClass, tRM_LL73.TRM_LL73.class, "TRM_LL73", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getTRM_LL73_PU(), thePUNBPackage.getPUNB(), null, "pU", null, 1, 1, tRM_LL73.TRM_LL73.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getTRM_LL73_Bound(), theBRM_LL73Package.getBRM_LL73(), null, "bound", null, 1, 1, tRM_LL73.TRM_LL73.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		addEOperation(trM_LL73EClass, null, "compute", 1, 1, IS_UNIQUE, IS_ORDERED);

		// Create resource
		createResource(eNS_URI);

		// Create annotations
		// Comments
		createCommentsAnnotations();
	}

	/**
	 * Initializes the annotations for <b>Comments</b>.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected void createCommentsAnnotations() {
		String source = "Comments";		
		addAnnotation
		  (this, 
		   source, 
		   new String[] {
			 "abstract", "RM, FP Method\n\nThis node compares the value of the processor utilisation to the upper boud of Liu and Layland. According to the model of assumptions, if this value is not within bound, the scheduling of the set of tasks is undetermined. ",
			 "previous", "mH1, bRM_LL73, punb",
			 "next", "results",
			 "bibtex", "@article{ liu73scheduling,\n    author = \"C. L. Liu and James W. Layland\",\n    title = \"Scheduling Algorithms for Multiprogramming in a Hard-Real-Time Environment\",\n    journal = \"Journal of the ACM\",\n    volume = \"20\",\n    number = \"1\",\n    pages = \"46--61\",\n    year = \"1973\",\n    url = \"citeseer.ist.psu.edu/liu73scheduling.html\" }"
		   });
	}

} //TRM_LL73PackageImpl
